home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
blankery
/
blitzblank
/
sources
/
bb.tiles
< prev
next >
Wrap
Text File
|
1993-09-17
|
7KB
|
337 lines
;BB.Tiles - Blanker-module for BlitzBlank
;Copyright 1993 by Thomas Boerkel
CloseEd
NoCli
NEWTYPE.table
r.l
g.l
b.l
End NEWTYPE
NEWTYPE.tags
a.l
b
c
d
e
f
End NEWTYPE
DEFTYPE.Screen *fs,*myscreen
DEFTYPE.ViewPort *vp
DEFTYPE.RastPort *rp
DEFTYPE.ColorMap *cm
DEFTYPE.NewScreen newscreen
DEFTYPE.Message *msg
DEFTYPE.table tab
DEFTYPE.MsgPort *port
DEFTYPE.tags tags
DEFTYPE.l
#SA_Interleaved=#SA_Dummy+$22
Select Par$(1)
Case "BLANK"
name$="BB.BlankModule"+Chr$(0)
*port=CreateMsgPort_()
*port\mp_Node\ln_Name=&name$
*port\mp_Node\ln_Pri=1
AddPort_ *port
SetTaskPri_ FindTask_(0),Val(Par$(8))
Gosub readconfig
lib$="intuition.library"+Chr$(0)
*ibase.IntuitionBase=OpenLibrary_(&lib$,39)
CloseLibrary_(*ibase)
If *ibase
v39=1
Else
*ibase.IntuitionBase=OpenLibrary_(&lib$,37)
CloseLibrary_(*ibase)
EndIf
*fs=*ibase\FirstScreen
left=*fs\LeftEdge
top=*fs\TopEdge
width=*fs\Width
height=*fs\Height
modeid=GetVPModeID_(*fs\ViewPort)
depth=*fs\BitMap\Depth
If width<500
gx=50
sx=1
Else
gx=100
sx=2
EndIf
If speed<3
sx*speed
EndIf
If speed=3
sx*4
EndIf
fdummy.q=gx/sx
If fdummy<>Int(gx/sx)
gx=Int(fdummy)*sx
EndIf
gy=gx*height/width
fdummy.q=gy/sx
If fdummy<>Int(gy/sx)
gy=Int(fdummy)*sx
EndIf
ax=width/gx
ay=height/gy
sw=(ax+1)*gx
sh=(ay+1)*gy
If speed<>4
sy=sx
Else
sy=gy
sx=gx
EndIf
title$="BB.Tile.Screen"+Chr$(0)
newscreen\LeftEdge=left,top,sw,sh,depth
newscreen\ViewModes=0,#CUSTOMSCREEN|#SCREENBEHIND,0,&title$
tags\a=#SA_DisplayID
tags\b=modeid
tags\c=0
If v39
tags\c=#SA_Interleaved
tags\d=True
tags\e=0
EndIf
*myscreen=OpenScreenTagList_(newscreen,tags)
If *myscreen
*vp=*myscreen\ViewPort
*rp=*myscreen\RastPort
*bm=*myscreen\BitMap
BltBitMap_ *fs\BitMap,0,0,*myscreen\BitMap,0,0,width,height,$C0,$FF,0
If ta=1
For x=0 To ax
For y=0 To ay
;Box x*gx,y*gy,(x+1)*gx-1,(y+1)*gy-1,1
SetAPen_ *rp,1
Move_ *rp,x*gx,y*gy
Draw_ *rp,(x+1)*gx-1,y*gy
Draw_ *rp,(x+1)*gx-1,(y+1)*gy-1
Draw_ *rp,x*gx,(y+1)*gy-1
Draw_ *rp,x*gx,y*gy
Next y
Next x
EndIf
If ta=2
For x=0 To ax
For y=0 To ay
SetAPen_ *rp,2
Move_ *rp,x*gx,(y+1)*gy-1
Draw_ *rp,x*gx,y*gy
Draw_ *rp,(x+1)*gx-1,y*gy
SetAPen_ *rp,1
Move_ *rp,x*gx,(y+1)*gy-1
Draw_ *rp,(x+1)*gx-1,(y+1)*gy-1
Draw_ *rp,(x+1)*gx-1,y*gy
Next y
Next x
EndIf
*cm=*fs\ViewPort\ColorMap
For i=0 To 2^depth
If v39
GetRGB32_ *cm,i,1,tab
SetRGB32_ *vp,i,tab\r,tab\g,tab\b
Else
c=GetRGB4_(*cm,i)
SetRGB4_ *vp,i,(c LSR 8) AND 15,(c LSR 4) AND 15,c AND 15
EndIf
Next i
ScreenToFront_ *myscreen
Dim f(ax+1,ay+1)
Dim dx(4),dy(4)
dx(0)=0:dy(0)=-1
dx(1)=1:dy(1)=0
dx(2)=0:dy(2)=1
dx(3)=-1:dy(3)=0
mx=Rnd(ax-1)+1
my=Rnd(ay-1)+1
br=-1
VWait
SetAPen_ *rp,0
RectFill_ *rp,mx*gx,my*gy,(mx+1)*gx-1,(my+1)*gy-1
Repeat
z=0
Repeat
r=Rnd(4)
Until mx+dx(r)>=0 AND mx+dx(r)<=ax AND my+dy(r)>=0 AND my+dy(r)<=ay AND r<>br
br=r-2
If br<0 Then br=br+4
pos=(my+1)*gy+50
Repeat
Select r
Case 0
a=mx*gx:b=(my-1)*gy+z:c=gx:d=gy:e=a:f=b+sy
gr=gy:s=sy
g=a:h=b:i=g+gx-1:j=h+sy-1
Case 2
gr=gy:s=sy
a=mx*gx:b=(my+1)*gy-z:c=gx:d=gy:e=a:f=b-sy
g=a:h=f+gy:i=g+gx-1:j=h+sy-1
Case 1
a=(mx+1)*gx-z:b=my*gy:c=gx:d=gy:e=a-sx:f=b
g=e+gx:h=b:i=g+sx-1:j=h+gy-1
gr=gx:s=sx
Case 3
gr=gx:s=sx
a=(mx-1)*gx+z:b=my*gy:c=gx:d=gy:e=a+sx:f=b
g=a:h=b:i=g+sx-1:j=h+gy-1
End Select
If speed<>4
VWait
Else
VWait 2
EndIf
If my<3
Repeat
Until VBeamPos_()>pos
EndIf
BltBitMap_ *bm,a,b,*bm,e,f,c,d,$C0,$ff,0
RectFill_ *rp,g,h,i,j
*msg=GetMsg_(*port)
z+s
Until z>=gr OR *msg
mx=mx+dx(r)
my=my+dy(r)
Until *msg
CloseScreen_ *myscreen
EndIf
RemPort_ *port
DeleteMsgPort_ *port
Case "INFO"
title$="Tiles"+Chr$(0)
reqtext$="Tiles - Module for BlitzBlank"+Chr$(10)
reqtext$+Chr$(169)+" 1993 by Thomas Brkel"+Chr$(10)+Chr$(10)
reqtext$+"Your actual screen will turn into a puzzle."+Chr$(10)+Chr$(10)
reqtext$+"Choose border and speed in the config-window."+Chr$(0)
gadget$="OK"+Chr$(0)
easy.EasyStruct\es_StructSize=SizeOf.EasyStruct
easy\es_Title=&title$
easy\es_TextFormat=&reqtext$
easy\es_GadgetFormat=&gadget$
EasyRequestArgs_ 0,easy,0,0
Case "CONFIG"
*myscreen=LockPubScreen_(0)
width=*myscreen\Width
height=*myscreen\Height
Gosub readconfig
WbToScreen 0
BorderPens 2,1
ButtonGroup 1
TextGadget 0,25,20,512,0," No Border "
TextGadget 0,25,40,512,1,"Simple Border"
TextGadget 0,25,60,512,2," 3D Border "
Toggle 0,ta,On
ButtonGroup 2
TextGadget 0,25,90,512,3," Speed: Slow "
TextGadget 0,25,110,512,4," Speed: Norm "
TextGadget 0,25,130,512,5," Speed: Fast "
TextGadget 0,25,150,512,6," Speed: !?%& "
Toggle 0,speed+2,On
Window 0,width/2-80,height/2-85,160,170,$100e,"Tiles",1,2,0
Repeat
ev=WaitEvent
Until ev=$200
ta=ButtonId(0,1)
speed=ButtonId(0,2)-2
Free Window 0
Gosub writeconfig
UnlockPubScreen_ 0,*myscreen
End Select
End
.readconfig
path$=Par$(9)
For i=10 To NumPars
path$=path$+" "+Par$(i)
Next i
If ReadFile(0,path$+"BB.Modules.config")
FileInput 0
While NOT Eof(0)
If Edit$(100)="*** Tiles ***"
ta=Edit(5)
speed=Edit(5)
EndIf
Wend
DefaultInput
CloseFile 0
EndIf
Gosub checkval
Return
.writeconfig
Gosub checkval
If ReadFile(0,path$+"BB.Modules.config")
If WriteFile(1,path$+"BB.Modules.temp")
FileInput 0
FileOutput 1
While NOT Eof(0)
f$=Edit$(100)
If f$="*** Tiles ***"
Repeat
f2$=Edit$(100)
Until Eof(0) OR Left$(f2$,3)="***"
If NOT Eof(0) Then NPrint f2$
Else
NPrint f$
EndIf
Wend
CloseFile 1
EndIf
CloseFile 0
EndIf
KillFile path$+"BB.Modules.config"
f$=path$+"BB.Modules.temp"+Chr$(0)
f2$=path$+"BB.Modules.config"+Chr$(0)
Rename_ &f$,&f2$
If OpenFile(0,path$+"BB.Modules.config")
FileOutput 0
FileSeek 0,Lof(0)
NPrint "*** Tiles ***"
NPrint ta
NPrint speed
CloseFile 0
EndIf
Return
.checkval
If ta<0 Then ta=0
If ta>2 Then ta=2
If speed<1 Then speed=1
If speed>4 Then speed=4
Return